iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
AI/ ML & Data

使用 jq 處理資料系列 第 25

Day25: 將主程式寫在 main.jq 檔案中

  • 分享至 

  • xImage
  •  

昨天我們一邊認識 generator 的概念,一邊回顧處理山陀兒颱風的程式。今天我們正式的要把 jq 主程式改寫到 .jq 的檔案中囉~

對話中學習

師傅:徒弟,你之前一直在命令提示字元裡用 jq 操作,今天我們來試試寫個完整的 main.jq 程式吧。

徒弟:好啊,怎麼開始呢?

師傅:首先,把你平常在命令列裡使用的 jq 表達式放進一個檔案,命名為 main.jq。這樣你就可以重複執行,不用每次都重新輸入指令。

徒弟:原本是 jq '.[] | {userId, title}' 我直接把 .[] | {userId, title} 放進 main.jq 裡就行了嗎?

師傅:沒錯!然後你可以這樣執行:jq -f main.jq data.json,這樣會讀取 main.jq 裡的程式碼來處理 data.json,相當於從命令列執行轉到程式文件執行。」

徒弟:「這樣寫真的方便多了,謝謝師傅!」

工欲善其事,必先利其器

建議使用 VSCode 這個開發工具,並且安裝 jq Syntax Highlighting 這個擴充套件。

https://ithelp.ithome.com.tw/upload/images/20241009/20078389SLgvohSI8R.png

安裝之後,打開 .jq 的檔案,就會有語法高亮提示,會好寫很多。

https://ithelp.ithome.com.tw/upload/images/20241009/20078389SdS3heyPxK.png

動手寫 main.jq

底下是現況的 krathon2024_json.bat 程式:

jq -c -r -s " ...(略)..." direction.json typhoon1005.json beaufort_wind.json

我們要把雙引號內部,也就是 jq 主要處理資料的程式,移動到 main.jq 檔案中。接著,krathon2024_json.bat 程式對應的改成:

jq -c -r -s -f main.jq direction.json typhoon1005.json beaufort_wind.json
注意❗: 使用 -f 參數才能接指定的 jq 主程式 main.jq

接著把 main.jq 整理一下,將之前煩人的跳脫引號 \"取代成普通的雙引號",如下:

# 期望參數 -c -r -s
# 期望輸入 direction.json typhoon1005.json beaufort_wind.json
def separate(f): f|split(","); 
.[0] as $direction | .[1] as $ty | .[2] as $wind |
["時間     ","經度","緯度","氣壓","風速MAX   ","陣風MAX   ","方向 ","預測"],
[
  $ty.records.tropicalCyclones.tropicalCyclone[] | 
  select(.typhoonName=="KRATHON") | 
  .analysisData.fix[-5:][] | 
  [
    .fixTime[0:13], 
    separate(.coordinate)[0], 
    separate(.coordinate)[1], 
    .pressure, 
    ((.maxWindSpeed|tonumber) as $speed|$wind[]|select($speed>=.min and $speed<.max)|.level), 
    ((.maxGustSpeed|tonumber) as $speed|$wind[]|select($speed>=.min and $speed<.max)|.level), 
    $direction[.movingDirection], 
    .movingPrediction[0].value
  ]
][] | 
@tsv

執行修改完的 krathon2024_json.bat 之後,可以看到如下結果,跟之前一樣。

https://ithelp.ithome.com.tw/upload/images/20241009/20078389N0YuhbL4et.png

結論

今天我們認識了 jq 主程式可以獨立寫在 .jq 檔案裡面,真的有相見恨晚的感受阿。不僅可以按照段落換行,還可以用 # 加上註解,比起單行,更容易閱讀。接著使用 VSCode 開發,搭配語法高亮提示的擴充套件,就跟開發其他語言沒有兩樣了。今天的修改可以參考 原始碼

感謝自己,今天也有認真學習😄


上一篇
Day24: 認識 generator 概念
下一篇
Day26: 提取函式,善用 debug
系列文
使用 jq 處理資料30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言